/**
 * 文件名：@SoaClientFeignImportRegister.java <br/>
 * 包名：cn.efunbox.afw.soa.client.netflix.feign <br/>
 * 项目名：afw-soa-client <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.soa.client.netflix.feign;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

import cn.efunbox.afw.soa.client.annotation.SoaClientConfig;

/**
 * 类名：SoaClientFeignImportRegister  <br />
 *
 * 功能：基于org.springframework.context.annotation.ImportBeanDefinitionRegistrar完成注册
 *
 * @author xtwin <br />
 * 创建时间：2016年7月28日 上午10:18:42  <br />
 * @version 2016年7月28日
 */
public class SoaClientFeignImportRegister extends AbstractSoaClientFeignRegister implements ImportBeanDefinitionRegistrar {
	
	// 日志记录器
	private static final Logger logger = LoggerFactory.getLogger(SoaClientFeignImportRegister.class);

	// 由接口注入
	private BeanDefinitionRegistry registry;
	
	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月28日 上午10:19:12<br/>
	 * 
	 * @param importingClassMetadata
	 * @param registry <br/>
	 * @see org.springframework.context.annotation.ImportBeanDefinitionRegistrar#registerBeanDefinitions(org.springframework.core.type.AnnotationMetadata, org.springframework.beans.factory.support.BeanDefinitionRegistry)
	 */
	@Override
	public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
		this.registry = registry;
		
		try {
			logger.info("the meta class is : {}", metadata.getClassName());
			
			// 执行注册
			register(Class.forName(metadata.getClassName(), true, Thread.currentThread().getContextClassLoader()).getAnnotationsByType(SoaClientConfig.class));
			
		} catch (ClassNotFoundException e) {
			throw new RuntimeException("SoaClientConfig registry fail with error : " + String.valueOf(e), e);
		}
	}

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年7月28日 上午10:18:54<br/>
	 * 
	 * @return <br/>
	 * @see cn.efunbox.afw.soa.client.register.AbstractSoaClientRegister#getRegistry()
	 */
	@Override
	protected BeanDefinitionRegistry getRegistry() {
		return registry;
	}
}